home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 24
/
AACD 24.iso
/
AACD
/
Resources
/
Sound
/
AHI
/
Developer
/
examples
/
Low-level
/
BestAudioID
/
BestAudioID.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-07-02
|
3KB
|
109 lines
/* Simple AHI_BestAudioID() example */
#include <devices/ahi.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/ahi.h>
#include <stdlib.h>
#include <string.h>
struct Library *AHIBase;
struct MsgPort *AHImp=NULL;
struct AHIRequest *AHIio=NULL;
BYTE AHIDevice=-1;
void cleanup(LONG rc)
{
if(!AHIDevice)
CloseDevice((struct IORequest *)AHIio);
DeleteIORequest((struct IORequest *)AHIio);
DeleteMsgPort(AHImp);
exit(rc);
}
void printmode(ULONG id) {
char name[40];
if(id != AHI_INVALID_ID) {
name[0] = '\0';
AHI_GetAudioAttrs(id, NULL,
AHIDB_BufferLen, 40,
AHIDB_Name, (ULONG) name,
TAG_DONE);
}
else {
strncpy(name, "Non-existing mode!", 40);
}
Printf("\nMode 0x%08lx (%s):\n", id, name);
}
void main(void)
{
ULONG mainid, id;
if(AHImp=CreateMsgPort())
if(AHIio=(struct AHIRequest *)CreateIORequest(AHImp,sizeof(struct AHIRequest))) {
AHIio->ahir_Version = 4;
AHIDevice=OpenDevice(AHINAME,AHI_NO_UNIT,(struct IORequest *)AHIio,NULL);
}
if(AHIDevice) {
Printf("Unable to open %s version 4\n",AHINAME);
cleanup(RETURN_FAIL);
}
AHIBase=(struct Library *)AHIio->ahir_Std.io_Device;
mainid = AHI_BestAudioID(AHIDB_Stereo,TRUE,
AHIDB_Volume,TRUE,
AHIDB_Bits,8,
AHIDB_MaxChannels,4,
TAG_DONE);
printmode(mainid);
Printf("Stereo, Volume, >= 8 bits and >= 4 channels.\n");
{
struct TagItem tags[] = {
AHIDB_Bits, 12,
AHIDB_Panning, TRUE,
AHIDB_HiFi, TRUE,
TAG_DONE
};
id = AHI_BestAudioID(AHIDB_Stereo,TRUE,
AHIDB_Volume,TRUE,
AHIDB_Bits,8,
AHIDB_MaxChannels,4,
AHIB_Dizzy, (ULONG) &tags,
TAG_DONE);
printmode(id);
Printf("Same as 0x%08lx but also, if possible, "
">= 12 bits, free stereo panning and HiFi mixing.\n", mainid);
}
{
struct TagItem tags[] = {
AHIDB_Bits, 16,
AHIDB_Stereo, FALSE,
TAG_DONE
};
id = AHI_BestAudioID(AHIDB_AudioID,id,
AHIB_Dizzy, (ULONG) &tags,
TAG_DONE);
printmode(id);
Printf("Using the same audio hardware at last mode, "
"this modes may have >= 16 bit resolution and be mono. But "
"I'm not sure.\n");
}
id = AHI_BestAudioID(AHIDB_Realtime, FALSE,
AHIDB_MaxChannels, 4,
TAG_DONE);
printmode(id);
Printf("A non-realtime mode with 4 channels.\n");
cleanup(0);
}